import orj.junit.Test;
import org.junit.Before;
import org.junit.After;
import static org.junit.Assert.*;
import com.oisix.oisystemec.dao.KokyakuDao;

public class CsvdataTest() { 

	@Before
	public void setUp() throws Exception { 

		//อ้างอิงมาจาก http://www.nattee.net/files-dae/ProgTool-lab6.pdf ข้อ 7 และ ข้อ 8

		//Make File Default Value
		PointBalanceService pb = new PointBalanceService();
		String namefiel = pb.makepointFilename();


		File pointtofile = new File(namefieln);
		File pointtoSummaryfile = new File(pb.makesummarypointFilename());

		//May be you can test, if Cannot test u shold move it to another function
		assertEquals(namefieln, "path/to/file.csv"); 
		assertEquals(pb.makesummarypointFilename(), "path/to/file.csv"); 
	 } 

	 //ทดสอบเพื่อแสดงผลข้อมูลใน CSV ข้อมูลเฉยๆ ไม่มีการเขียนลง
	 //อ้างอิงจาก http://www.narisa.com/forums/index.php?showtopic=29658 ล่างสุดเลย
	 @Test
	 public void testCheckDataPointto() { 
	 	try {	
	 		List<Map<String, Object>> pointBalanceList = KokyakuDao.getPointBalance();
	 		for (Map<String, Object> item : pointBalanceList) {

	 			//อ้างอิงจาก http://stackoverflow.com/questions/12729280/junit-how-to-check-if-string-is-equal-to-one-of-two-strings
            			//เช็คว่า gochiFlg เป็น 0 หรือ 1 รึเปล่า เชียนได้สองแบบ แบบแรกไม่มั่นใจ ว่าถูกไหม
            			assertTrue(item.get("gochiFlg").equals("0") || item.get("gochiFlg").equals("1") );

            			//แบบสองเช็ตได้ชัวร์
            			if(item.get("gochiFlg")=="0") {
            				assertEquals(item.get("gochiFlg"), "0"); 
            			} else { 
            				assertEquals(item.get("gochiFlg"), "1");
            			}
            			//บางที item.get("gochiFlg") อาจไม่ใช้ Sting ก็ให้แปลงค่าให้มันก่อนด้วย ใช้ .toString()

            			//Systen out ตรงนี้เพื่อให้แสดงข้อมูลที่ output อ้างอิงจาก KokyakuDao.getPointSummary ว่ามีแถวอะไรบ้าง addScalar
            			//อาจใส่หรือไม่ใส่ก็ได้ แต่ที่ใส่ไว้เพื่อแสดงข้อมูล
        				System.out.println("...................................");
		                        System.out.println("kokyakuId = " + item.get("kokyakuId"));
	                                	System.out.println("shimei = " + item.get("shimei"));
	                                	System.out.println("furigana = " + item.get("furigana"));
	                                	System.out.println("pointo = " + item.get("pointo"));
	                                	System.out.println("shinkisakuseiDate = " + item.get("shinkisakuseiDate"));
	                                	System.out.println("gochiFlg = " + item.get("gochiFlg"));
        			}
	          	} catch (Exception e) {
	                        System.out.println("" + e.getMessage());
	                        fail();
	           	}


	 }

	 public void testCheckDataPointSummary() {
	 	try {	
	 		List<Map<String, Object>> pointBalanceList = KokyakuDao.getPointSummaryBalance();
	 		//อ้างอิงจาก createPointSummaryFile
	 		assertEquals(pointBalanceList.get(0).get("totalPoint"), "91");
	 		System.out.println("Summary Point Data");
	 		System.out.println("...................................");
		            System.out.println("AllPointto = " + pointBalanceList.get(0).get("totalPoint"));
	          	} catch (Exception e) {
	                        System.out.println("" + e.getMessage());
	                        fail();
	           	}
	 }

	@Test 
	public void testGochiflg() { 

		//อ้างอิง ที่ ออมบอก
		//PointBalanceService pointBalanceService = new PointBalanceService();
		AutoTaskHistory history = new AutoTaskHistory();
        		String userId = "9000";
        		pb.execute(history, userId);

		//ฟังค์ชั่นนี้ต้องการให้อ่านไฟล์จาก CSV แล้วเช็คว่าค่า gochiFlg เป็น 1 หรือ 0 ใช่หรือไม่ 
		//บางทีฟังค์ชั่นนี้อาจไม่จำเป็นเพราะเอาไว้ตรวจสอบข้อมูลเฉยๆ ไม่ใช่รัน


        		 try {
			//Read Csv Data 
			List<String[]> csvContent = CsvUtil.getLines( pointtofile , "UTF-8");

			// Use for loop to read all 
			// gochiFlg = 5 เพราะว่ามันอยู่ตำแหน่งที่ 5 นับจาก kokyaku.getPointBalance อ่านจากตรง addScalar
			// อ่านเกี่ยวกับ loop เพิ่มได้ที่ http://www.mkyong.com/java/how-do-loop-iterate-a-list-in-java/
			int sum = 0;
			for (int i = 0; i < csvContent.size(); i++) {
				//sum = sum+csvContent.get(i)[8];
	            		assertTrue(csvContent.get(i)[5].equals("0") || csvContent.get(i)[5] .equals("1") );
			}
		} catch (FileNotFoundException e) {
            		e.printStackTrace();
        		} catch (IOException e) {
            		e.printStackTrace();
        		} 
	}

	@After
	public void tearDown() throws Exception { 
		 pb = null;
		 pointtofile = null;
		 pointtoSummaryfile = null;
	 }



}